package co.gov.medellin.ssti.sub.model.dao;

import java.util.Collection;

import co.gov.medellin.ssti.sub.model.vo.AreaVO;
import co.gov.medellin.ssti.sub.model.vo.AuditoriaVO;
import co.gov.medellin.ssti.sub.model.vo.SubprogramaVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.UserVO;

public interface AuditoriaDAO {
	/**
	 * Metoo que consulta en PAOYER.TCS_USUARIO los usuarios cuyo campo_a1 IS
	 * NULL y opcionalmente filtrando por cedula y descripcion: Si cedula no es
	 * empty filtra con nombre = cedula. Si descripcion no es empty filtra con
	 * descripcion like UPPER(descripcion).
	 * 
	 * @param cedula
	 *            Cedula del usuario (nombre en la tabla).
	 * @param descripcion
	 *            Descripcion del usuario.
	 * @return
	 * 
	 */
	Collection<UserVO> findUsers(String cedula, String descripcion);

	/**
	 * Metodo que consulta en base de datos el reporte de auditoria segun los
	 * criterios elegidos.
	 * 
	 * @param tabla
	 *            Tabla elegida a consultar. (TCS_BEN_BENEFICIARIO,
	 *            TCS_BEN_SUBPROGRAMA, TCS_BEN_SEDE, TCS_BEN_BENEFICIO_OTORGADO,
	 *            TCS_BEN_SUBP_ATR_BENEFICIARIO o TCS_BEN_SUBPROGRAMA_SEDE)
	 * @param fechaCreaDesde
	 *            Fecha inicial de creacion.
	 * @param fechaMofificaDesde
	 *            Fecha inicial de modificacion.
	 * @param fechaCreaHasta
	 *            Fecha final de creacion.
	 * @param fechaMofificaHasta
	 *            Fecha final de modificacion.
	 * @param usuarioCrea
	 *            Usuario que crea.
	 * @param usuarioModifica
	 *            Usuario que modifica.
	 * @return Collection<AuditoriaVO> registros que cumplen con los criterios
	 *         de busqueda. Retorna una collection vacia en caso de no encontrar
	 *         coincidencias.
	 */
	Collection<AuditoriaVO> findReporte(String tabla, String fechaCreaDesde,
			String fechaMofificaDesde, String fechaCreaHasta,
			String fechaMofificaHasta, String usuarioCrea,
			String usuarioModifica);

	/**
	 * Metodo que consulta en base de datos la cantidad de registros
	 * encontrados, segun los parametros enviados.
	 * 
	 * @param tabla
	 *            Tabla elegida a consultar. (TCS_BEN_BENEFICIARIO,
	 *            TCS_BEN_SUBPROGRAMA, TCS_BEN_SEDE, TCS_BEN_BENEFICIO_OTORGADO,
	 *            TCS_BEN_SUBP_ATR_BENEFICIARIO o TCS_BEN_SUBPROGRAMA_SEDE)
	 * @param fechaCreaDesde
	 *            Fecha inicial de creacion.
	 * @param fechaMofificaDesde
	 *            Fecha inicial de modificacion.
	 * @param fechaCreaHasta
	 *            Fecha final de creacion.
	 * @param fechaMofificaHasta
	 *            Fecha final de modificacion.
	 * @param usuarioCrea
	 *            Usuario que crea.
	 * @param usuarioModifica
	 *            Usuario que modifica.
	 * @return Valor numerico correspondiente a la cantidad de registros
	 *         encontrados.
	 */
	Long findCantidadRegistros(String tabla, String fechaCreaDesde,
			String fechaMofificaDesde, String fechaCreaHasta,
			String fechaMofificaHasta, String usuarioCrea,
			String usuarioModifica);

	/**
	 * Metodo que consulta en base de datos las areas que puede consultar un
	 * usuario.
	 * 
	 * @param iCodeUser
	 *            Codigo del usuario.
	 * @param strGroupUser
	 *            Grupo de usuarios al que pertenece el usuario.
	 * @return Areas que puede consultar el usuario.
	 */
	Collection<AreaVO> selectSecretaria(int iCodeUser, String strGroupUser);

	/**
	 * 
	 * @param strNameGroup
	 *            Grupo de usuarios al que pertenece el usuario.
	 * @param lCodeArea
	 *            Codigo del area.
	 * @param strNameUser
	 *            Nombre del usuario.
	 * @param strFind
	 * @return
	 */
	Collection<UserVO> findUserAdm(String strNameGroup, Long lCodeArea,
			String strNameUser, String strFind);

	/**
	 * Metodo encargado de generar la collection de resultados para el reporte
	 * de control de acceso.
	 * 
	 * @param criteria
	 *            SubprogramaVO con parametros para filtrar la busqueda.
	 * @return
	 */
	Collection<AuditoriaVO> findReportControl(SubprogramaVO criteria);

	/**
	 * Metodo que consulta el valor descripcion de un usuario en
	 * PAOYER.TCS_USUARIO.
	 * 
	 * @param strNumberDocument
	 *            Nombre del usuario (nro documento).
	 * @return descripcion Descripcion del usuario.
	 */
	String findDescriptionUser(String strNumberDocument);
}
